package tech.cn.note.excel.test.dto;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

/**
 * @author tongyu
 */
@Data
public class CustomPositionReportDTO implements Serializable {

    private static final long serialVersionUID = -1652551383738380622L;

    @Schema(description = "交易编号")
    private String tradeId;

    @Schema(description = "确认书编号")
    private String positionId;

    @Schema(description = "期权代码")
    private String optionNumber;

    @Schema(description = "多腿编号")
    private String legsNumber;

    @Schema(description = "浮动盈亏")
    private BigDecimal floatProfitLoss;

    @Schema(description = "实现盈亏")
    private BigDecimal realizeProfitLoss;

    @Schema(description = "当前波动率")
    private BigDecimal currentVol;

    @Schema(description = "Delta")
    private BigDecimal delta;

    @Schema(description = "Delta手数")
    private BigDecimal deltaLotNumber;

    @Schema(description = "Gamma")
    private BigDecimal gamma;

    @Schema(description = "Gamma手数")
    private BigDecimal gammaLotNumber;

    @Schema(description = "Theta")
    private BigDecimal theta;

    @Schema(description = "Rho")
    private BigDecimal rho;

    @Schema(description = "Vega")
    private BigDecimal vega;

    @Schema(description = "到期日期")
    private LocalDate expirationDate;

    @Schema(description = "行权方式")
    private String exerciseType;

    @Schema(description = "结构类型")
    private String productType;

    @Schema(description = "观察状态")
    private String observationStatus;

    @Schema(description = "交易对手方")
    private String partyName;

    @Schema(description = "交易对手编号")
    private String partyCode;

    @Schema(description = "簿记账户")
    private String bookName;

    @Schema(description = "成交日期")
    private LocalDate initialDate;

    @Schema(description = "看涨看跌")
    private String optionType;

    @Schema(description = "买卖方向")
    private String direction;

    @Schema(description = "标的代码")
    private String instrumentId;

    @Schema(description = "标的名称")
    private String instrumentName;

    @Schema(description = "期初价格")
    private BigDecimal initialSpot;

    @Schema(description = "行权价格")
    private BigDecimal strikePrice;

    @Schema(description = "持仓市值（涨停价）")
    private BigDecimal positionValueUp;

    @Schema(description = "持仓市值（跌停价）")
    private BigDecimal positionValueDown;

    @Schema(description = "权利金(成交)")
    private BigDecimal premiumAdvanceRate;

    @Schema(description = "成交数量")
    private BigDecimal initialTradeVolume;

    @Schema(description = "有效成交数量")
    private BigDecimal effectiveTradeVolume;

    @Schema(description = "成交金额")
    private BigDecimal premiumAdvance;

    @Schema(description = "存续成本")
    private BigDecimal remainingPremiumAdvance;

    @Schema(description = "名义本金")
    private BigDecimal initialNotional;

    @Schema(description = "有效名义本金")
    private BigDecimal effectiveInitialNotional;

    @Schema(description = "持仓名义本金")
    private BigDecimal notional;

    @Schema(description = "持仓有效名义本金")
    private BigDecimal effectiveNotional;

    @Schema(description = "最新标的物价格")
    private BigDecimal spot;

    @Schema(description = "无风险利率")
    private BigDecimal r;

    @Schema(description = "分红率")
    private BigDecimal q;

    @Schema(description = "权利金(存续)")
    private BigDecimal initPremiumAdvanceRate;

    @Schema(description = "存续数量")
    private BigDecimal survivalNumber;

    @Schema(description = "有效存续数量")
    private BigDecimal effectiveSurvivalNumber;

    @Schema(description = "存续市值")
    private BigDecimal pv;

    @Schema(description = "维持保证金")
    private BigDecimal margin;

    @Schema(description = "二元类型")
    private String digitalType;

    @Schema(description = "二元_补偿金额")
    private BigDecimal digitalCompensateAmount;


    @Schema(description = "是否离散观察")
    private Boolean discreteObserve;

    /**
     * 补偿方式
     */
    @Schema(description = "补偿方式")
    private String compensateType;

    /**
     * 执行价类型
     */
    @Schema(description = "执行价类型")
    private String strikePriceType;

    /**
     * 均价起算日
     */
    @Schema(description = "均价起算日")
    // @SetCellStyle(columnName = "均价起算日", sortNum = 520)
    private LocalDate avgPriceDate;

    /**
     * 均价起算方式
     */
    @Schema(description = "均价起算方式")
    // @SetCellStyle(columnName = "均价起算方式", sortNum = 530)
    private String avgPriceType;

    /**
     * 参与率
     */
    @Schema(description = "参与率")
    //@SetCellStyle(columnName = "参与率", numberScale = "0.00%", sortNum = 540)
    private BigDecimal participation;

    /**
     * 杠杆率
     */
    @Schema(description = "杠杆率")
    // @SetCellStyle(columnName = "杠杆率", numberScale = "0.00%", sortNum = 550)
    private BigDecimal leverage;


    @Schema(description = "增强价格")
    private BigDecimal enhancedPrice;

    /**
     * 障碍类型
     */
    @Schema(description = "障碍类型")
    //@SetCellStyle(columnName = "增强价格", numberScale = "#,##0.0###", sortNum = 570)
    private String barrierStyle;

    /**
     * 障碍价格
     */
    @Schema(description = "障碍价格")
    //  @SetCellStyle(columnName = "增强价格", numberScale = "#,##0.0###", sortNum = 590)
    private BigDecimal barrierPrice;

    /**
     * 高障碍价格
     */
    @Schema(description = "高障碍价格")
    // @SetCellStyle(columnName = "高障碍价格", numberScale = "#,##0.0###", sortNum = 600)
    private BigDecimal highBarrierPrice;

    /**
     * 补偿金额
     */
    @Schema(description = "补偿金额")
    // @SetCellStyle(columnName = "补偿金额", numberScale = "#,##0.0###", sortNum = 610)
    private BigDecimal compensateAmount;

    /**
     * 障碍偏移
     */
    @Schema(description = "障碍偏移")
    //@SetCellStyle(columnName = "障碍偏移", numberScale = "#,##0.0###", sortNum = 620)
    private BigDecimal barrierOffset;

    /**
     * 补偿支付
     */
    @Schema(description = "补偿支付")
    //@SetCellStyle(columnName = "补偿支付", numberScale = "0.00%", sortNum = 630)
    private String compensatePayment;


    /**
     * 执行价格3
     */
    @Schema(description = "执行价格3")
    // @SetCellStyle(columnName = "执行价格3", numberScale = "#,##0.0###", sortNum = 650)
    private BigDecimal strikePrice3;

    /**
     * 参与率2
     */
    @Schema(description = "参与率2")
    //@SetCellStyle(columnName = "参与率2", numberScale = "0.00%", sortNum = 660)
    private BigDecimal participation2;

    /**
     * 参与率3
     */
    @Schema(description = "参与率3")

    //@SetCellStyle(columnName = "参与率3", numberScale = "0.00%", sortNum = 670)
    private BigDecimal participation3;

    /**
     * 累计结构类型
     */
    @Schema(description = "累计结构类型")
    private String accumulatorOptionType;

    /**
     * 是否熔断
     */
    @Schema(description = "是否熔断")
    private Boolean circuitBreak;

    /**
     * 上端收益类型
     */
    @Schema(description = "上端收益类型2")
    private String upperIncomeType;

    /**
     * 上端收益类型2
     */
    @Schema(description = "上端收益类型2")
    private String upperIncomeType2;

    /**
     *  行权价格2
     */
    @Schema(description = "行权价格2")
    private BigDecimal strikePrice2;

    /**
     * 观察类型
     */
    private String observationType;


    /**
     * 敲出支付类型
     */
    @Schema(description = "敲出支付类型")
    private String knockOutPaymentType;


    @Schema(description = "敲出价格")
    private BigDecimal knockOutPrice;

    @Schema(description = "敲出价格2")
    private BigDecimal knockOutPrice2;

    /**
     * 敲出收益率
     */
    @Schema(description = "敲出收益率")
    private BigDecimal knockOutCouponRate;

    /**
     * 收益率
     */
    @Schema(description = "收益率")
    private BigDecimal couponRate;

    /**
     * 红利票息
     */
    @Schema(description = "红利票息")
    private BigDecimal snowBallCouponRate;

    /**
     * 均价起算日
     */
    @Schema(description = "均价起算日")
    private LocalDate averagePriceDate;

    @Schema(description = "标的品种")
    private String tradeCategory;

    @Schema(description = "交易员")
    private String bookingUser;

    @Schema(description = "备注")
    private String remark;

    @Schema(description = "交易标签")
    private String tradeTag;

    @Schema(description = "客户标签")
    private String customerTag;

    @Schema(description = "报告日期")
    private LocalDate valuationDate;

    @Schema(description = "报告名称")
    private String reportName;

    @Schema(description = "合约状态")
    private String contractStatus;

}
